package com.manong.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;

import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

/**
 * @author 李茂鑫
 * @Date 2025/1/8 11:04
 * @Descripition
 */
@Data //Lombok 提供的一个注解，自动生成该类的 getter、setter、toString、equals、hashCode 方法。
@EqualsAndHashCode(callSuper = false) //用于自动生成 equals 和 hashCode 方法。callSuper = false 表示不调用父类的 equals 和 hashCode 方法。
@TableName("sys_user")
public class User implements Serializable, UserDetails {
//Serializable：表示该类的对象可以被序列化，通常是为了可以将对象存储到文件、数据库或通过网络传输。
//UserDetails：这是 Spring Security 中的一个接口，表示一个用户的详细信息。实现该接口的类需要提供一些用于认证和授权的方法。
    private static final long serialVersionUID = 1L;

    /**
     * 用户编号 自增
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 登录名称(用户名)
     */
    private String username;

    /**
     * 登录密码
     */
    private String password;

    /**
     * 账户是否过期
     */
    private boolean isAccountNonExpired = true;

    /**
     * 账户是否被锁定
     */
    private boolean isAccountNonLocked = true;
    /**
     * 密码是否过期
     */
    private boolean isCredentialsNonExpired = true;

    /**
     * 账户是否可用
     */
    private boolean isEnabled = true;

    /**
     * 真实姓名
     */
    private String realName;

    /**
     * 昵称
     */
    private String nickName;

    /**
     * 所属部门id
     */
    private Long departmentId;

    /**
     * 所属部门名称
     */
    private String departmentName;

    /**
     * 性别(0-男，1-女)
     */
    private Integer gender;

    /**
     * 电话
     */
    private String phone;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 用户头像
     */

    private String avatar;

    /**
     * 是否是管理员(1-是,0-不是)
     */
    private Integer isAdmin;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 修改时间
     */
    private Date updateTime;

    /**
     * 是否删除(0-未删除，1-删除)
     */
    private Integer isDelete;
    /**
     * 权限列表 @TableField(exist = false) 表示该字段不会映射到数据库表中 用于 Spring Security 进行授权检查。
     */
    @TableField(exist = false)
    Collection<? extends GrantedAuthority> authorities;
    /**
     * 查询用户权限列表
     */
    @TableField(exist = false)
    private List<Permission> permissionList;


}
